import { produce } from 'immer';
import { queryOptionsScenarioList } from '@/services/profile';

import type { Effect, ImmerReducer } from 'umi';

export type TProfileModelState = typeof initialState;

export type TProfileModel = {
  namespace: 'profile';
  state: TProfileModelState;
  effects: {
    // eslint-disable-next-line no-unused-vars
    [key in string]: Effect;
  };
  reducers: {
    // eslint-disable-next-line no-unused-vars
    [key in string]: ImmerReducer<TProfileModelState>;
  };
};

export const DefaultFormValue = {
  activityStartTime: null,
  activityEndTime: null,
  activity: '',
  activityGroupRound: '',
  useChannelName: '',
  useChannelId: [],
  activityId: '',
  activityGroup: '',
  groupTypeId: '',
  placeChannelName: '',
  brandId: '',
  brandName: '',
  couponPrice: '', // Sales券净值必须大于0
  sales: '', // Sales券净值必须大于0
  businessModel: 'B2C', //业务模式
  couponTypeName: '产品', //券类型
  issuerName: 'YUM', //发放商户名称
  couponSource: 'YUM券平台', //发码机构
  placeStyle: '积分兑换', //发放性质
  discountLevel: 1, //折扣力度
  placetypeLevel: 1, //形式
  sortGroup: 0, //排序分组
  lastestTop: 0, //当天获取置顶
  regionLimitType: 0, //区域限制类型
  invoiceType: 'N/A', //开票节点
  finacnceShareObject: 'N/A', //分摊对象
  financeShareType: 'N/A', //分摊方式
  unitpricesource: '主档', //单价来源
  placeType: '不导出券码', //发放方式
  countCheck: [], // 发放电子券数量--是否限制
  personLimitCountCheck: [], // 单人可领数量--是否限制
  reusableCountCheck: [], // 每张可使用次数--是否限制
  packageLimit: '1', // 套餐限制--是否限制
  priceLimit: '1', // 价格规则--是否限制
  orderLimit: '0', // 订单限制--是否限制
  validThruRule: 1, // 有效期模式--是否限制
  salesType: 0, // Sales计算规则--是否限制
  tenderTypeDesc: '折扣', //  结账或折扣--是否限制
  isDynamicCoupon: 0, //  是否动态券码
  isExpanded: 0, //  是否延期券
  placeRule: 0, //  发放特殊处理
  offerReset: 0, //  重置周期
  isrealtime: 0, //  实时返回商城
  isdynamiccount: 0, //  是否动态次数
  isgivingonebyone: 0, //  转赠单次转赠领用
  needSyncBooking: 0, //  同步预约系统
  needCheckBooking: 0, //  校验预约信息
  crossBrandPlace: 0, //  是否跨品牌发放
  needBookCoupon: 0, //  是否生成预约券
  productKey: 0, //  键位模版
  useMarketing: [], //  限制使用规则明细
  // storeLimit: 'black', //门店限制
  dateLimit: 'black', //日期限制
  timeLimit: 'black', //日期限制
  dweekLimit: 'black', //星期限制
  dmonthLimit: 'black', //天数限制
  deliveryFeeList: [
    {
      timeRange: '',
      startPoint: '',
      deliveryFee: '',
    },
  ], // 外送费list
  returnDiscount: -100, //POS结算折扣比例
  storeLimit: false, //门店限制
  storelimit: false, //门店限制
  storeIdLimit: false, //
  storeIdlimit: false, //
  allowGiving: false, //
  priceRule: -1, //满
  discountPrice: -1, //
  faceAmount: -1, //
  needCheck: 0, //是否需要验码
  givingLimit: 0, //
  countShowType: [], //使用次数显示方式
  placeBrand: '001', //
  redeemInterval: 0, //核销时间间隔
  preloadSeconds: 0, //预加载缓存时间（秒）
  offerResetCount: 0, //重置次数
  tenantList: [],
} as any; // 整个表单的value;

const initialState = {
  name: '',
  age: 18,
  formValue: DefaultFormValue,
  OptionsUsetabList: [] as API.OptionsKeys[], //  卡包栏位枚举
  OptionsNotifyRuleList: [] as API.OptionsKeys[], //  规则名称枚举
  OptionsActivityProductkeyList: [] as API.OptionsKeys[], //  键位模板枚举
  OptionsStoreTypeList: [] as API.OptionsKeys[], //  餐厅类型枚举
  OptionsDaypartList: [] as API.OptionsKeys[], //  用餐时间ID枚举
  OptionsStoreGrouplist: [] as API.OptionsKeys[], // 餐厅组--枚举
  OptionsDategroupList: [] as API.OptionsKeys[], // 日期组--枚举
  FatherListUniq: [] as string[], // 劵渠道--描述
  QueryChannelIdUniq: [] as string[], // 查询渠道--第三变量
  OptionsTenantListUniq: [] as API.OptionsTenantListItem[], // 劵渠道--描述
};

const ProfileModel: TProfileModel = {
  namespace: 'profile',
  state: initialState,
  // subscriptions: {},
  effects: {
    // 场景
    // *queryOptionsScenarioList({ payload }, { call, select, put }) {
    //   const { code, data, message } = yield call(queryOptionsScenarioList);
    //   if (code === 200) {
    //     const OptionsScenarioList = [] as API.OptionsKeys[];
    //     data.forEach((item: API.OptionsScenarioListItem) => {
    //       OptionsScenarioList.push({
    //         label: item.scenarioName,
    //         value: item.scenarioId,
    //       });
    //     });
    //     yield put({
    //       type: 'setSoloValue',
    //       payload: {
    //         lable: 'OptionsScenarioList',
    //         value: OptionsScenarioList,
    //       },
    //     });
    //   }
    // },
  },
  reducers: {
    setFormValue: (state, { payload }) =>
      produce(state, (draft) => {
        draft.formValue = {
          ...draft.formValue,
          ...payload,
        };
      }),
    resetFormValue: (state, { payload }) =>
      produce(state, (draft) => {
        draft.formValue = {
          ...DefaultFormValue,
        };
      }),
    // 单个属性值通用修改： selectedMenu
    // payload={
    //   lable:'selectedMenu',
    //   value:'',
    // }
    setSoloValue: (state, { payload }) =>
      produce(state, (draft) => {
        draft[payload.lable] = payload.value;
      }),
  },
};

export default ProfileModel;
